/*
 * c_registro.h
 *
 *  Created on: 27 Apr 2010
 *      Author: osky
 */



#include "c_registro.h"
#include <stdio.h>
#include <string.h>
/* Constructor */

c_registro::c_registro ( int c_clave, unsigned int c_largodata, void* c_data,unsigned int c_largo_clave_str, char* c_clave_str)
        {
        clave = c_clave;
	largodata = c_largodata;
	data = new char[largodata+1];
        memmove(data,c_data,largodata);
        largo_clave_str=c_largo_clave_str;
        clave_str=c_clave_str;
        
        }

c_registro::c_registro ()
        {
        clave = 0;
        largodata = 0;
        data = NULL;
        largo_clave_str=0;
        clave_str=NULL;

        
        }


void c_registro::set_registro ( unsigned int s_clave, unsigned int s_largodata, void* s_data,unsigned int c_largo_clave_str, char* c_clave_str)
        {
        clave = s_clave;
        largodata = s_largodata;
	data = new char[largodata+1];
        memmove(data,s_data,s_largodata);
        }

void c_registro::get_registro ( unsigned int &g_clave,  unsigned int &g_largodata, void* &g_data,unsigned int &c_largo_clave_str, char* &c_clave_str)
        {
        g_clave = clave;
        g_largodata = largodata;
	g_data = new char[largodata+1];
	memmove(g_data, data,largodata);
        }

int c_registro::copiar (c_registro *reg_b)
    {
     clave=reg_b->clave;
     largodata=reg_b->largodata;

     data = new char[largodata+1];
     memmove(data,reg_b->data,largodata);
     
     largo_clave_str=reg_b->largo_clave_str;
     clave_str=reg_b->clave_str;
     
     
    return 1;

    }


int c_registro::serializar( c_bloque* membuffer)
	{
	 int resultado=1;

	 resultado&=membuffer->add (clave);
	 
	 resultado&=membuffer->add (largo_clave_str);
	 resultado&= membuffer->add (clave_str,largo_clave_str);

	 
	 resultado&=membuffer->add (largodata);
	 resultado&= membuffer->add (data,largodata);
	 

	 

	 return resultado;
	}


int c_registro::deserializar( c_bloque* membuffer)
	{
	 int resultado=1;

	 resultado&=membuffer->get (&clave);
	 
	 resultado&=membuffer->get (&largo_clave_str);
	 resultado&=membuffer->get (&clave_str,largo_clave_str);
	 
	 
	 resultado&=membuffer->get (&largodata);
	 resultado&=membuffer->get (&data,largodata);




	 return resultado;
	}

unsigned int c_registro::largo_reg ()
    { return sizeof(clave)+ sizeof (largodata) + largodata + sizeof (largo_clave_str) + largo_clave_str;
    }


unsigned int c_registro::get_clave()
    {
    return clave;
    }

char* c_registro::get_data()
    {
    return (char*) data;
    }


char* c_registro::get_clave_str()
    {
    return (char*) clave_str;
    }

int c_registro::get_largo_data(){

	return largodata;
}

/*    int des_serializar_reg (FILE *handler) */

